package bancosys.tec.persist.persister.listener;

/**
 * PurePersisterListener. Analogo ao PersisterListener
 * 
 * @author takeshi
 * @param <T>
 */
public interface PurePersisterListener<T> {

    /**
     * Chamado antes de inserir um objeto na base
     * 
     * @param target o objeto
     */
    void beforeInsert(T target);

    /**
     * Chamado apos inserir um objeto na base
     * 
     * @param target o objeto
     */
    void afterInsert(T target);

    /**
     * Chamado antes de atualizar um objeto na base
     * 
     * @param target o objeto
     */
    void beforeUpdate(T target);

    /**
     * Chamado apos atualizar um objeto na base
     * 
     * @param target o objeto
     */
    void afterUpdate(T target);

    /**
     * Chamado antes de apagar um objeto na base
     * 
     * @param target o objeto
     */
    void beforeDelete(T target);

    /**
     * Chamado apos apagar um objeto na base
     * 
     * @param target o objeto
     */
    void afterDelete(T target);

    /**
     * Deve devolver o tipo da entidade
     * 
     * @return {@link Class}
     */
    Class<? extends T> entityType();

}
